summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2023-01-10 18:46:01 +0100
committerLiam <byteslice@airmail.cc>2023-01-10 18:46:01 +0100
commit385ddef8c331117f16ccb681a8bd47e0603e9f3c (patch)
tree6dafac48e7eeea764cae67471fab7fc02a4962ef
parentmacOS: Make Yuzu show up in the Launchpad Games folder (#9594) (diff)
downloadyuzu-385ddef8c331117f16ccb681a8bd47e0603e9f3c.tar
yuzu-385ddef8c331117f16ccb681a8bd47e0603e9f3c.tar.gz
yuzu-385ddef8c331117f16ccb681a8bd47e0603e9f3c.tar.bz2
yuzu-385ddef8c331117f16ccb681a8bd47e0603e9f3c.tar.lz
yuzu-385ddef8c331117f16ccb681a8bd47e0603e9f3c.tar.xz
yuzu-385ddef8c331117f16ccb681a8bd47e0603e9f3c.tar.zst
yuzu-385ddef8c331117f16ccb681a8bd47e0603e9f3c.zip
-rw-r--r--src/yuzu/bootmanager.cpp19
-rw-r--r--src/yuzu/bootmanager.h4
2 files changed, 21 insertions, 2 deletions
diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp
index 3d560f303..d65991734 100644
--- a/src/yuzu/bootmanager.cpp
+++ b/src/yuzu/bootmanager.cpp
@@ -96,9 +96,9 @@ void EmuThread::run() {
m_is_running.store(false);
m_is_running.notify_all();
- emit DebugModeEntered();
+ EmulationPaused(lk);
Common::CondvarWait(m_should_run_cv, lk, stop_token, [&] { return m_should_run; });
- emit DebugModeLeft();
+ EmulationResumed(lk);
}
}
@@ -111,6 +111,21 @@ void EmuThread::run() {
#endif
}
+// Unlock while emitting signals so that the main thread can
+// continue pumping events.
+
+void EmuThread::EmulationPaused(std::unique_lock<std::mutex>& lk) {
+ lk.unlock();
+ emit DebugModeEntered();
+ lk.lock();
+}
+
+void EmuThread::EmulationResumed(std::unique_lock<std::mutex>& lk) {
+ lk.unlock();
+ emit DebugModeLeft();
+ lk.lock();
+}
+
#ifdef HAS_OPENGL
class OpenGLSharedContext : public Core::Frontend::GraphicsContext {
public:
diff --git a/src/yuzu/bootmanager.h b/src/yuzu/bootmanager.h
index eca16b313..092c6206f 100644
--- a/src/yuzu/bootmanager.h
+++ b/src/yuzu/bootmanager.h
@@ -92,6 +92,10 @@ public:
}
private:
+ void EmulationPaused(std::unique_lock<std::mutex>& lk);
+ void EmulationResumed(std::unique_lock<std::mutex>& lk);
+
+private:
Core::System& m_system;
std::stop_source m_stop_source;